package com.demo.zerocopy;

import java.io.FileInputStream;
import java.net.InetSocketAddress;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;

/**
 * @author gy
 * @date 2022/5/22
 */
public class NewNIOClient {
    public static void main(String[] args) throws Exception{
        SocketChannel socketChannel = SocketChannel.open();
        socketChannel.connect(new InetSocketAddress("localhost",7001));
        String fileName = "20220514-netty-study/src/main/resources/莫兰特.png";

        // 得到一个文件 channel
        FileChannel fileChannel = new FileInputStream(fileName).getChannel();

        // 准备发送
        long startTime = System.currentTimeMillis();

        // 在 Linux下 一个 transferTo 方法就可以完成传输
        // 在 Windows 下 一次调用 transferTo 只能发送8m，就需要分段传输文件，(分段传输，写个小小的算法就可以)
        // 而且要主要传输时的位置
        long transferCount = fileChannel.transferTo(0, fileChannel.size(),socketChannel);
        System.out.println("发送的总的字节数 = " + transferCount + " 耗时：" +
                (System.currentTimeMillis() - startTime));

        // 关闭
        fileChannel.close();
    }
}
